Swarm翻譯為一大群或是密集的東西,在Docker中則是指將多個Docker主機組在一起的單個虛擬或是物理機,可以管理多個跨主機部署的container。Swarm將全部Docker主機組在一起後還是能夠對container使用Docker的命令,但是是經由Swarm執行,並且所有動作會由集群的manager來控制。
Swarm與Kubernetes確實有許多相似之處,皆具有高可用性、可擴展性、Load balancing、自我修復等特性,兩者的比較網路上也是有許多文章就自行查看了。不過可以說的是Swarm是內建在Docker可以說是為Docker而生的,其在部屬的時候能直接使用Dockerfile而不用編譯,並且Swarm能夠直接使用docker-compose的檔案(某些功能可能需要對映做修改像是deploy),在平台的統一性以及使用上的簡易性來說是佔有優勢的。
要創立Swarm可以使用init就會教導你怎麼創建
docker swarm init
那當我們建立之後當然要設置worker以及manager,所以可以使用join加入兩者
docker swarm join-token worker
docker swarm join-token manager
透過我們之前遊玩Docker建立的compose-file,改成用stack命令來建立Swarm。
docker-compose檔案
version: '3.8'
services:
    app:
        image: node:12-alpine
        command: sh -c "yarn install && yarn run dev"
        ports:
            - 3000:3000
        working_dir: /app
        volumes:
            - ./:/app
        environment:
            MYSQL_HOST: mysql
            MYSQL_USER: root
            MYSQL_PASSWORD: secret
            MYSQL_DB: todos
    mysql:
        image: mysql:5.7
        volumes:
            - todo-mysql-data:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: secret
            MYSQL_DATABASE: todos
volumes:
    todo-mysql-data:
執行docker stack deploy來使用compose file建置Swarm
?$ docker stack deploy --compose-file docker-compose.yml            
 mystack
Creating network mystack_default
Creating service mystack_app
Creating service mystack_mysql
可以看到我們的network以及兩個服務都建立好了,在Dashboard裡面則是長這樣
這時候就可以訪問localhost:3000來運行我們的APP
Swarm的node可以有幾種命令來操作,首先是查看方式
?$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
ue096u6tpyy4gnidykdnn884x *   docker-desktop      Ready               Active              Leader              19.03.12
通常node ls會列出多個node的資訊,因為我們這個Swarm只有一個節點所以才顯示一個
如果要檢查單個節點可以使用docker node inspect <NODE-ID>,輸出會是JSON格式但是會有點亂,因此可以再用--pretty flag來整理成條列式的顯示方式。
?$ docker node inspect self --pretty
ID:                     ue096u6tpyy4gnidykdnn884x
Hostname:               docker-desktop
Joined at:              2020-09-28 14:39:45.472015233 +0000 utc
Status:
 State:                 Ready
 Availability:          Active
 Address:               192.168.65.3
Manager Status:
 Raft Status:           Reachable
 Leader:                Yes
Platform:
 Operating System:      linux
 Architecture:          x86_64
Resources:
 CPUs:                  2
 Memory:                1.944GiB
Plugins:
 Log:           awslogs, fluentd, gcplogs, gelf, journald, json-file, local, logentries, splunk, syslog
 Network:               bridge, host, ipvlan, macvlan, null, overlay
 Volume:                local
Engine Version:         19.03.12
---(略)
今天就先學到這邊了,Swarm感覺還有很多可以使用的,不過目前只知道可以deploy compose file而已
參考文獻:
docker官方文件